/* Die Klasse MedienSortierung realisiert die Sortierung 
 * von Medien in unterschiedliche Kategorien von Medium
 * man kann darduch eine Liste von Aufsatz, Buch, Ebook ,etc bekommen 
 * die man fuer die eines Buches braucht
 * 
 * 
 * Datei: MedienSortierung.java       
 * Autor: Gregory Keussi
 * 
 * Datum: 06.11.11                 Version: 0.1 
 * 
 * Historie: 11.11.11 v0.1  
 *                    implementiert  
 * 
 */

package suche;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

import medienverwaltung.Aufsatz;
import medienverwaltung.Buch;
import medienverwaltung.Datentraeger;
import medienverwaltung.Ebook;
import medienverwaltung.Hoerbuch;
import medienverwaltung.Medium;
import medienverwaltung.Zeitschrift;

public class MedienSortierung implements SuperString<Medium>
{
  private List<Medium> myMedienList = new ArrayList<Medium> ();
  private List<Aufsatz> aufsatzList = new ArrayList<Aufsatz> ();
  private List<Ebook> ebookList = new ArrayList<Ebook> ();
  private List<Buch> buchList = new ArrayList<Buch> ();
  private List<Datentraeger> datentraegerList = new ArrayList<Datentraeger> ();
  private List<Zeitschrift> zeitschriftList = new ArrayList<Zeitschrift> ();
  private List<Hoerbuch> hoerbuchList = new ArrayList<Hoerbuch> ();
  private List<String> MyString = new ArrayList<String> ();


  /*
   * Die Implementierung des parameterskonstruktor des Klasse
   * Mediensortierung.
   */
  public MedienSortierung (List<Medium> myMedienList)
  {
    this.setzeMyMedienList (myMedienList);
    mediumSort ();
  }


  /*
   * Dischiedenen Mediene Methode sortier eine liste von Medien nach
   * verschiedenen Sorten von Medien.und bauert eine Liste von diesen
   * ver
   */

  private void mediumSort ()
  {

    String a = " ";
    for (Medium medium : gibMyMedienList ())
    {

      if (medium instanceof Buch)
      {

        a += "\n Buch:\n Autoren :";
        a += ((Buch) medium).gibAutorenListeString ();
        a += superString ((Buch) medium);
        MyString.add (a);
        buchList.add ((Buch) medium);

      }
      if (medium instanceof Aufsatz)
      {

        a += "Aufsatz:\n ";
        a += ((Aufsatz) medium).gibAutor ().gibNachname ();
        a += superString ((Aufsatz) medium);
        MyString.add (a);
        aufsatzList.add ((Aufsatz) medium);
      }
      if (medium instanceof Zeitschrift)
      {

        a += "Zeitschrift:\n Verlag ";
        a += ((Zeitschrift) medium).gibVerlag ().gibName ();
        a += superString ((Buch) medium);
        MyString.add (a);
        Zeitschrift zeitschrift = (Zeitschrift) medium;
        zeitschriftList.add (zeitschrift);
      }

      if (medium instanceof Ebook)
      {
        a += "\n Ebook:\n Autoren: ";
        a += ((Ebook) medium).gibAutorenListeString ();
        a += superString ((Ebook) medium);
        MyString.add (a);
        Ebook ebook = (Ebook) medium;
        ebookList.add (ebook);
      }
      if (medium instanceof Hoerbuch)
      {

        a += "\n Hoeruch:\n ";
        a += ((Hoerbuch) medium).gibAutorenListeString ();
        a += superString ((Hoerbuch) medium);
        MyString.add (a);
        Hoerbuch hoerbuch = (Hoerbuch) medium;
        hoerbuchList.add (hoerbuch);
      }
      if (medium instanceof Datentraeger)
      {
        a += "\n Datentraeger:\n ";
        a += superString ((Datentraeger) medium);
        MyString.add (a);
        Datentraeger datentraeger = (Datentraeger) medium;
        datentraegerList.add (datentraeger);

      }

    }

    /*
     * Die Methode gibt eine Liste von Objekt String zurueck. und jede
     * Stringsobjekt liefert die Informationen ueber ein bestimmte
     * Medium .
     */

    setzeAufsatzList (aufsatzList);
    setzeBuchList (buchList);
    setzeDatentraegerList (datentraegerList);
    setzeHoerbuchList (hoerbuchList);
    setzeEbookList (ebookList);
    setzeZeitschriftList (zeitschriftList);

  }


  public List<String> gibMyString ()
  {

    Collections.sort (MyString, new CompareString ());

    return MyString;
  }


  public List<Medium> gibMyMedienList ()
  {
    return myMedienList;
  }


  public void setzeMyMedienList (List<Medium> myMedienList)
  {
    this.myMedienList = myMedienList;
  }


  public List<Aufsatz> gibAufsatzList ()
  {
    return aufsatzList;
  }


  public void setzeAufsatzList (List<Aufsatz> aufsatzList)
  {
    this.aufsatzList = aufsatzList;
  }


  public List<Ebook> gibEbookList ()
  {
    return ebookList;
  }


  /*
   * Die Methode ersetzezt eine Liste von Ebook
   */
  public void setzeEbookList (List<Ebook> ebookList)
  {
    this.ebookList = ebookList;
  }


  /*
   * Die Methode gibt eine Liste von Buecher zurueck.
   */
  public List<Buch> gibBuchList ()
  {
    return buchList;
  }


  /*
   * Die Methode setzezt eine Liste von Buch mit einer neuen Liste
   */

  public void setzeBuchList (List<Buch> buchList)
  {
    this.buchList = buchList;
  }


  /*
   * Die Methode gibt eine Liste von Datentraeger zurueck.
   */

  public List<Datentraeger> gibDatentraegerList ()
  {
    return datentraegerList;
  }


  /*
   * Die methode setzezt eine neueListe von Daten traeger
   */

  public void
      setzeDatentraegerList (List<Datentraeger> datentraegerList)
  {
    this.datentraegerList = datentraegerList;
  }


  /*
   * Die Methode gibt einer liste von Zeitschrift zurueck
   */

  public List<Zeitschrift> gibZeitschriftList ()
  {
    return zeitschriftList;
  }


  /*
   * Die Methode setzezt eine Liste von Zeitschrift mit einer neuen
   * Liste/
   * 
   * @param zeitschriftList
   */

  public void setzeZeitschriftList (List<Zeitschrift> zeitschriftList)
  {
    this.zeitschriftList = zeitschriftList;
  }


  public List<Hoerbuch> gibHoerbuchList ()
  {
    return hoerbuchList;
  }


  /*
   * Die methode setzezt eine Liste von Hoerbuch mit einer neuen Liste
   * von Hoerbuch.
   */
  public void setzeHoerbuchList (List<Hoerbuch> hoerbuchList)
  {
    this.hoerbuchList = hoerbuchList;
  }


  @Override
  public String superString (Medium t)
  {
    String s = "\n ";
    s += "\nFach: ";
    s += t.gibFachgebiet ();
    s += " Sach: ";
    s += t.gibSachgebiet ();
    s += " \nThema: ";
    s += t.gibThema ();
    s += " Titel ";
    s += t.gibTitel ();
    s += " \nStichW: ";
    s += t.gibStichworteString ();
    s += " Erschnungsjahr: ";
    s += t.gibErscheinungsdatumString ();
    s += "\n Verlag: ";
    try
    {
     // s += t.gibVerlag ().gibName ();
    }
    catch (Exception e)
    {

    }

    return s;
  }

}
